MongoDB 概述与安装
MongoDB 是一款领先的、基于分布式文件存储的开源 NoSQL 数据库。由 C++ 语言编写,旨在为现代 Web 应用提供兼具可扩展性、灵活性和高性能的数据存储解决方案。
MongoDB 核心特性
| 特性 | 说明 |
|---|---|
| 灵活的文档模型 | 以 BSON 格式存储数据,无需预定义模式,字段可动态增减 |
| 高可用性 | 通过副本集(Replica Set)实现数据冗余和自动故障转移 |
| 水平可扩展性 | 通过分片(Sharding)支持海量数据存储,可线性扩展 |
| 丰富的查询语言 | 支持字段查询、范围查询、正则表达式、聚合框架、全文检索 |
| 事务支持 | 4.0+ 支持多文档事务,4.2+ 支持分布式事务 |
| 索引支持 | 支持多种索引类型:单字段、复合、文本、地理空间、TTL 等 |
SQL 与 MongoDB 术语对比
| 关系型数据库 | MongoDB | 描述 |
|---|---|---|
| Database | Database | 数据库的容器 |
| Table | Collection | 文档的集合 |
| Row | Document | 一条记录 |
| Column | Field | 文档中的键值对 |
| Index | Index | 提升查询性能 |
| Primary Key | _id | 文档的唯一标识符 |
| JOIN | $lookup | 表关联(聚合阶段) |
| GROUP BY | $group | 分组聚合 |
| SELECT | find() | 查询数据 |
文档与 _id
MongoDB 的核心数据单元是"文档",由键值对构成:
json
{
"_id": ObjectId("6388b3d94a33f23a9735a257"),
"name": "Alice",
"age": 30,
"courses": ["Math", "Physics"],
"address": {
"street": "123 Main St",
"city": "Anytown"
}
}_id字段:每个文档的唯一标识,如未指定会自动生成ObjectId- ObjectId 结构:12 字节 = 4字节时间戳 + 5字节随机值 + 3字节计数器
code
ObjectId 结构(12 字节):
┌────────────┬──────────────────┬─────────────┐
│ 时间戳(4B) │ 随机值(5B) │ 计数器(3B) │
└────────────┴──────────────────┴─────────────┘BSON 数据类型
| 类型 | 描述 | 示例 |
|---|---|---|
Double | 64位浮点数 | 10.99 |
String | UTF-8 字符串 | "Hello" |
Object | 嵌入式文档 | { "field": "value" } |
Array | 数组 | ["apple", "banana"] |
ObjectId | 文档唯一 ID | ObjectId() |
Boolean | 布尔值 | true / false |
Date | 日期时间(毫秒精度) | new Date() |
Null | 空值 | null |
Int32/Int64 | 32/64位整数 | NumberInt("100") |
Decimal128 | 高精度小数 | NumberDecimal("10.99") |
Binary | 二进制数据 | BinData(0, "base64") |
Timestamp | 内部时间戳 | Timestamp(1234567890, 1) |
安装与配置
macOS 安装
bash
# 使用 Homebrew 安装
brew tap mongodb/brew
brew install mongodb-community@7.0
# 启动服务
brew services start mongodb/brew/mongodb-community
# 验证安装
mongosh --versionWindows 安装
- 下载 MongoDB 官网 的 MSI 安装包
- 运行安装程序,推荐选择"Complete"安装类型
- 将
bin目录添加到系统Path环境变量 - 创建数据目录:
mkdir C:\data\db
Linux 安装(Ubuntu)
bash
# 导入 MongoDB 公钥
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
# 添加源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 安装
sudo apt update
sudo apt install -y mongodb-org
# 启动
sudo systemctl start mongod
sudo systemctl enable mongod启动与验证
bash
# macOS
brew services start mongodb/brew/mongodb-community
# Linux
sudo systemctl start mongod
# 手动启动(开发环境)
mongod --dbpath /path/to/data --port 27017
# 验证连接
mongosh
# 在 mongosh 中测试
> db.version()
7.0.x
> show dbs启用访问控制
生产环境必须启用认证:
javascript
// 1. 创建管理员用户
use admin
db.createUser({
user: "myAdmin",
pwd: passwordPrompt(), // 或直接写密码字符串
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
})yaml
# 2. 修改配置文件 mongod.conf(通常位于 /usr/local/etc/mongod.conf 或 /etc/mongod.conf)
security:
authorization: enabled
# 完整配置示例
storage:
dbPath: /usr/local/var/mongodb
journal:
enabled: true
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo.log
logAppend: true
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabledbash
# 3. 重启服务后使用凭据连接
mongosh -u myAdmin -p --authenticationDatabase admin
# 连接字符串格式
mongosh "mongodb://myAdmin:password@localhost:27017/admin"常用角色说明
| 角色 | 权限范围 | 适用场景 |
|---|---|---|
root | 超级用户 | 管理员账户 |
userAdminAnyDatabase | 所有库的用户管理 | 用户管理员 |
readWriteAnyDatabase | 所有库的读写权限 | 应用账户 |
readWrite | 单库读写权限 | 应用账户 |
dbAdmin | 单库管理权限 | 数据库维护 |
clusterAdmin | 集群管理 | 集群运维 |
下一篇:MongoDB 基础操作